home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Utilities / Miscellaneous / CopyPaste 3.3.4 / CopyPaste Tools Sourcecode / Sentence Caps / Sentence Caps.p < prev    next >
Encoding:
Text File  |  1997-06-06  |  2.4 KB  |  102 lines  |  [TEXT/CWIE]

  1. {•This sourcecode is an example for creating a FKey coderesource with•}
  2. {•Metrowerks Pascal. It is copyrighted by Peter Hoerster and released•}
  3. {•for free use in any Shareware or Freeware product as a way to thank all•}
  4. {•programmers who share code snippets. You may put this sources on any•}
  5. {•CD ROM or any Archive Server but you may not sell it. •}
  6.  
  7. {• For comments please write to <hoerster@muenster.de>•}
  8.  
  9.  
  10.  
  11. unit SentenceCaps;
  12.  
  13. interface
  14.  
  15.     uses
  16.         Types, OSUtils, GestaltEqu, Script, notification, Resources, Events,
  17.          PascalA4, QuickDraw, ToolUtils, Memory, LowMem, Scrap;
  18.  
  19.  
  20.  
  21. {$MAIN}
  22.                         
  23.     procedure main;        
  24.  
  25. implementation
  26.  
  27.     procedure dopaste;
  28.     const
  29.         pastecode=2422;
  30.     var 
  31.         qel: EvQelPtr;
  32.     begin
  33.             if ppostevent(3, pastecode, qel) = noerr then
  34.             qel^.evtqmodifiers := cmdkey;
  35.     end;
  36.  
  37.  
  38.     procedure main;
  39.         var
  40.             oldA4: LongInt;
  41.             myerr: oserr;
  42.             myclipsize, templongint: longint;
  43.             myclipHandle: handle;
  44.             
  45.     procedure dosentence;
  46.             var
  47.                 lastoffset, offset, dist, i: longint;
  48.                 offsets: OffsetTable;
  49.                 teststr: str15;
  50.                 chartype: longint;
  51.         begin
  52.             offset := 0;
  53.             repeat
  54.                 chartype := CharacterType(mycliphandle^, offset, smcurrentscript);
  55.                 offset := offset + 1;
  56.             until BAND(chartype, smcTypeMask) <> smCharPunct;
  57.             uppertext(ptr(ord4(myclipHandle^) + offset - 1), 1);
  58.             offset := 0;
  59.             lastoffset := 0;
  60.             repeat
  61.                 teststr := '1234';
  62.                 FindWord(myclipHandle^, myclipsize, offset, true, nil, offsets);
  63.                 offset := offsets[0].offfirst;
  64.                 dist := offset - lastoffset;
  65.                 if dist > 4 then
  66.                     dist := 4;
  67.                 blockmove(ptr(ord4(myclipHandle^) + lastoffset), @teststr[1], dist);
  68.                 lastoffset := offsets[0].offfirst;
  69.                 offset := offsets[0].offsecond;
  70.                 for i := 1 to 4 do
  71.                     if teststr[i] in ['.', '?', '!'] then
  72.                         begin
  73.                             uppertext(ptr(ord4(myclipHandle^) + offset), 1);
  74.                         end;
  75.             until offset >= myclipsize;
  76.         end;
  77.  
  78.             
  79.     begin
  80.         oldA4 := SetCurrentA4;
  81.         myclipsize := GetScrap(nil, 'TEXT', templongint);
  82.         mycliphandle := Tempnewhandle(myclipsize,myerr);
  83.         if myerr=noerr then 
  84.             begin
  85.                 myclipsize := GetScraP(myclipHandle, 'TEXT', templongint);
  86.                 if myclipsize > 0 then
  87.                     begin
  88.                         Temphlock(mycliphandle,myerr);
  89.                         if myerr=noerr then 
  90.                             begin
  91.                                 dosentence;
  92.                                 myerr := ZeroScrap;
  93.                                 myerr := putscrap(myclipsize, 'TEXT', myclipHandle^);
  94.                                 dopaste;
  95.                             end;
  96.                         Temphunlock(myCliphandle,myerr);
  97.                     end;
  98.             end;
  99.         TempDisposeHandle(myCliphandle,myerr);
  100.         oldA4 := SetA4(oldA4);
  101.     end;
  102. end.